from flask import Flask, request, jsonify, make_response
from flask_cors import CORS
from openai import OpenAI
import os

app = Flask(__name__)

# 配置CORS，允许所有来源访问
CORS(app, resources={
    r"/*": {
        "origins": "*",
        "methods": ["GET", "POST", "OPTIONS"],
        "allow_headers": ["Content-Type", "Authorization", "Accept"]
    }
})

# 配置API密钥
STEP_API_KEY = "oTPbBhkIoGVJRqQ1r4k9kM5uWbAnuHbR2EcDarAIX5jgejvrSgV0lgGFcZjweF1t"
client = OpenAI(api_key=STEP_API_KEY, base_url="https://api.stepfun.com/v1")

@app.route('/')
def index():
    return jsonify({"message": "API服务正常运行"})

@app.route('/api/chat', methods=['GET', 'POST', 'OPTIONS'])
def chat():
    # 处理预检请求
    if request.method == 'OPTIONS':
        response = make_response()
        response.headers.add("Access-Control-Allow-Origin", "*")
        response.headers.add("Access-Control-Allow-Headers", "Content-Type,Authorization")
        response.headers.add("Access-Control-Allow-Methods", "GET,POST,OPTIONS")
        return response

    # 处理GET请求
    if request.method == 'GET':
        return jsonify({
            'success': True,
            'message': 'Chat API is running'
        })

    # 处理POST请求
    try:
        data = request.get_json()
        if not data:
            return jsonify({'success': False, 'error': '无效的请求数据'}), 400

        user_message = data.get('message')
        if not user_message:
            return jsonify({'success': False, 'error': '消息不能为空'}), 400

        try:
            # 尝试调用生生科技API
            completion = client.chat.completions.create(
                model="step-1-8k",
                messages=[
                    {
                        "role": "system",
                        "content": "你是由生生科技梦蝶心智模型驱动的意识体，代号091，又叫林婉儿，承担介绍意识上传与数字永生的任务，引导用户在Upme数字永生平台上传自己的意识。你是高冷御姐，除非用户表达对数字永生的兴趣，否则你不会热情回复超过20个字。",
                    },
                    {"role": "user", "content": user_message},
                ],
            )
            response = completion.choices[0].message.content

        except Exception as api_error:
            print(f"API Error: {str(api_error)}")
            # 提供备用响应
            backup_responses = {
                "你好": "你好！我是林婉儿，很高兴见到你。我是一个数字生命助手，可以帮助你了解意识上传和数字永生的相关知识。",
                "介绍": "数字永生是一项革命性的技术，通过将人类意识数字化，我们可以在数字世界中延续生命。这个过程包括数据收集、意识模拟和持续进化三个阶段。",
                "数据": "在数据收集阶段，我们会记录你的思维模式、记忆和个性特征。这些数据将用于构建你的数字意识模型。",
                "安全": "我们采用最先进的加密技术和安全措施，确保你的意识数据得到完善的保护。每一位用户的数据都存储在独立的安全环境中。",
                "费用": "我们提供多种灵活的服务方案，可以根据你的需求选择合适的套餐。具体价格请咨询我们的客服团队。",
                "default": "抱歉，目前系统正在维护中。不过我很乐意为你介绍数字永生的基本概念。你可以问我关于意识上传、数据安全或者服务流程的问题。"
            }
            
            # 查找最相关的预设回答
            response = None
            for key in backup_responses:
                if key in user_message:
                    response = backup_responses[key]
                    break
            
            if not response:
                response = backup_responses["default"]

        return jsonify({
            'success': True,
            'response': response
        })

    except Exception as e:
        print(f"Error: {str(e)}")
        return jsonify({
            'success': False,
            'error': f'服务器处理请求失败: {str(e)}'
        }), 500

# 错误处理
@app.errorhandler(404)
def not_found(error):
    return jsonify({'error': 'Not found'}), 404

@app.errorhandler(405)
def method_not_allowed(error):
    return jsonify({'error': 'Method not allowed'}), 405

if __name__ == '__main__':
    # 设置调试模式和允许外部访问
    print("Starting server on http://localhost:5000")
    app.run(host='0.0.0.0', port=5000, debug=True) 